﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;

namespace StarControl
{
    //**  Nave de Combate - Poder especial > Tiros pra todo lado **//
    public class ValkyrieShip : Nave
    {
        //private Keys botaoMissilTeleguiado; //Tecla para identificar o disparo da arma especial míssil teleguiado.
        /*private Keys botaoArmaPrimaria; //Tecla para identificar o disparo da arma primaria.*/
        bool apertouTiroEspecial;


        public ValkyrieShip(Game game, int jogador)
            : base(game)
        {
            this.setJogador(jogador);
            apertouTiroEspecial = false;
            Initialize();
        }

        public override void poderEspecial()
        {
            // Atirar para todos os lados!
            ArmaPrimaria armaEsp1 = new ArmaPrimaria(Game, 1, this, 1, new Vector2(getDirecao().X, getDirecao().Y));
            ArmaPrimaria armaEsp2 = new ArmaPrimaria(Game, 1, this, 1, new Vector2(getDirecao().X*-2, getDirecao().Y));
            ArmaPrimaria armaEsp3 = new ArmaPrimaria(Game, 1, this, 1, new Vector2(getDirecao().X, getDirecao().Y*-2));
            ArmaPrimaria armaEsp4 = new ArmaPrimaria(Game, 1, this, 1, new Vector2(getDirecao().X*-2, getDirecao().Y*-2));
            armaEsp1.setBatch(getBatch());
            armaEsp2.setBatch(getBatch());
            armaEsp3.setBatch(getBatch());
            armaEsp4.setBatch(getBatch());
            getGame().Components.Add(armaEsp1);
            getGame().Components.Add(armaEsp2);
            getGame().Components.Add(armaEsp3);
            getGame().Components.Add(armaEsp4);
        }

        public override void Initialize()
        {
            base.Initialize();

            posicaoInicialNaves(this.getJogador());
            setImagem(carregarImagem("Textures/naves/Valkyrie"));
            setImagemHidden(carregarImagem("imagens/flare"));
            setImagemEscudoBasico(carregarImagem("imagens/escudo_basico4"));
            this.CriarNave(3, 1, getPosition(), getImagem(), 300.0f, 350.0f, this.getJogador(), 5);
            ativarEscudoBasico();
        }

        public override void Draw(GameTime gameTime)
        {
            base.Draw(gameTime);

            this.barraEnergia.Draw(gameTime, getBatch());
            getBatch().Begin();
            setPosition(getPosition());
            Texture2D _img = getImagem();
            Rectangle? rect = null;
            getBatch().Draw(_img, getPosition(), rect, Color.White,
                (float)Math.Atan2(direcao.Y, direcao.X),
                new Vector2(_img.Width / 2, _img.Height / 2),
                1.0f,
                SpriteEffects.None,
                0.0f);
            getBatch().End();

            Escudo _escudoBasico = getEscudoBasico();

            // Garante que este escudo foi instanciado
            if (_escudoBasico != null)
            {
                /* escudo básico */
                getEscudoBasico().Update(gameTime);
                getEscudoBasico().Draw(gameTime);
            }
        }

        public void armaPrimaria()
        {
            
            List<Nave> naves = recuperaComponentesNave();
            foreach (Nave nave in naves)
            {

                // TODO BELL: Lembrar de descomentar antes de entregar
                // if (nave.getJogador() != this.getJogador() && !(nave is StarfighterShip))
                if (!(nave is StarfighterShip))
                {
                    ArmaPrimaria arma1 = new ArmaPrimaria(Game, 1, nave, 1);
                    getGame().Components.Add(arma1);
                }
            }
             
        }

        // Aciona a arma primaria
        public override void acionaArmaPrimaria()
        {
            ArmaPrimaria arma1 = new ArmaPrimaria(Game, 1, this, 1);
            arma1.setBatch(getBatch());
            getGame().Components.Add(arma1);
        }

        public override void Update(GameTime gameTime)
        {
            base.Update(gameTime);
            /*
           */

            /*
            // Alterar a tecla usada para ativar o míssil
            if (Keyboard.GetState().IsKeyDown(botaoMissilTeleguiado))
            {
                poderEspecial();
            }*/

            //Arma Primaria
            if (Keyboard.GetState().IsKeyDown(getBotaoTiro()) && !apertouTiro)
            {
                acionaArmaPrimaria();
                apertouTiro = true;
            }
            if (Keyboard.GetState().IsKeyUp(getBotaoTiro()))
            {
                apertouTiro = false;
            }

            // Atira para todos os lados
            if (Keyboard.GetState().IsKeyDown(getBotaoEspecial()) && !apertouTiroEspecial)
            {
                poderEspecial();
                apertouTiroEspecial = true;
            }
            if (Keyboard.GetState().IsKeyUp(getBotaoEspecial()))
            {
                apertouTiroEspecial = false;
            }

        }

    }
}
